public class Person {

    // 类变量 变量属于类 当类被加载的时候 变量就被加载到了
    static int live;

    // 属于对象， 实例化对象的时候 new 在内存中分配空间时候 变量才会出现
    int age;
    String name;

    public static void eat() {
        // this 指代当前对象  在static方法中还没有对象
//        System.out.println(this.name); 错误示范
        System.out.println();  // 实例变量是在加载对象的时候才会创建 在static方法中还没有对象 此时也没有实例变量
        System.out.println("人吃饭");
        // die();  错误调用  // 实例方法是在创建对象的时候才会加载，在static方法中还没有对象，此时也没有实例方法
    }

    public void die() {
        System.out.println(live); // 因为静态变量属于类，对象能创建说明类已经加载，此时静态变量已经存在
        eat();
        System.out.println("人死亡");
    }


    public static void main(String[] args) {
        //
        Person p = new Person();
        Person.live = 1;
        p.age = 23;
        p.eat();

        p.die();
        Person.eat();
        // 实例变量不能通过 类名.属性名 的方法获取  静态变量可以通过 类名.属性名 的方式获取
        // 实例变量只能通过 对象名.属性名 的方法获取 静态变量可以通过 类名.属性名 也可以通过对象名.属性名 的方式获取 推荐 类名.属性名
        // 实例变量各个对象私有，静态变量 各个对象共享

        // Person.age
        System.out.println(Person.live);
        Person p2 = new Person();
        System.out.println(p2.age); // 0
        System.out.println(p2.live); // 1

        // static 修饰方法
        // 可以通过 类名.方法名 或者 对象名.方法名调用都可以 类名.方法名 推荐使用 调用non-static 只能通过对象名.方法名调用



    }
}
